package com.example.java_gobang.game.service;

import com.example.java_gobang.game.model.Room;
import org.springframework.stereotype.Component;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 管理游戏房间的类。
 * 可以添加、移除和获取房间，并提供根据房间ID或用户ID获取房间的方法。
 */
@Component
public class RoomManager {
    // 用于存储房间的 ConcurrentHashMap
    private final ConcurrentHashMap<String, Room> rooms = new ConcurrentHashMap<>();
    // 用于存储用户ID与房间的映射关系的 ConcurrentHashMap
    private final ConcurrentHashMap<Integer, Room> userIdToRooms = new ConcurrentHashMap<>();

    /**
     * 向房间管理器中添加一个房间，并建立用户ID与房间的映射关系。
     * @param room 要添加的房间
     * @param userId1 第一个用户的ID
     * @param userId2 第二个用户的ID
     */
    public void add(Room room, int userId1, int userId2) {
        rooms.put(room.getRoomId(), room);
        userIdToRooms.put(userId1, room);
        userIdToRooms.put(userId2, room);
    }

    /**
     * 从房间管理器中移除一个房间，并移除用户ID与房间的映射关系。
     * @param room 要移除的房间
     * @param userId1 第一个用户的ID
     * @param userId2 第二个用户的ID
     */
    public void remove(Room room, int userId1, int userId2) {
        rooms.remove(room.getRoomId());
        userIdToRooms.remove(userId1);
        userIdToRooms.remove(userId2);
    }

    /**
     * 根据房间ID获取房间对象。
     * @param roomId 房间ID
     * @return 对应的房间对象，如果不存在则返回null
     */
    public Room getRoomByRoomId(String roomId) {
        return rooms.get(roomId);
    }

    /**
     * 根据用户ID获取与之关联的房间对象。
     * @param userId 用户ID
     * @return 与该用户关联的房间对象，如果不存在则返回null
     */
    public Room getRoomByUserId(int userId) {
        String roomId = userIdToRooms.get(userId).getRoomId();
        if (roomId == null) {
            return null;
        }
        return userIdToRooms.get(userId);
    }
}
